#ifndef __SHT20_H
#define __SHT20_H

#include "stm32f4xx_hal.h"

// SHT20 I2C 地址
#define SHT20_I2C_ADDR 0x40

// SHT20 命令
#define SHT20_CMD_TRIG_T_MEASURE_HOLD 0xE3  // 触发温度测量（保持模式）
#define SHT20_CMD_TRIG_RH_MEASURE_HOLD 0xE5 // 触发湿度测量（保持模式）
#define SHT20_CMD_TRIG_T_MEASURE_NOHOLD 0xF3 // 触发温度测量（非保持模式）
#define SHT20_CMD_TRIG_RH_MEASURE_NOHOLD 0xF5 // 触发湿度测量（非保持模式）
#define SHT20_CMD_WRITE_USER_REG 0xE6 // 写用户寄存器
#define SHT20_CMD_READ_USER_REG 0xE7  // 读用户寄存器
#define SHT20_CMD_SOFT_RESET 0xFE     // 软复位

// 用户寄存器位定义
#define SHT20_RES_RH12_T14 0x00 // 分辨率：湿度12位，温度14位
#define SHT20_RES_RH8_T12 0x01  // 分辨率：湿度8位，温度12位
#define SHT20_RES_RH10_T13 0x80 // 分辨率：湿度10位，温度13位
#define SHT20_RES_RH11_T11 0x81 // 分辨率：湿度11位，温度11位
#define SHT20_END_OF_BATTERY 0x40 // 电池电量低标志
#define SHT20_HEATER_ON 0x04     // 加热器开启
#define SHT20_HEATER_OFF 0x00    // 加热器关闭
#define SHT20_OTP_RELOAD_DISABLE 0x02 // 禁止重新加载OTP
#define SHT20_OTP_RELOAD_ENABLE 0x00  // 允许重新加载OTP

// 测量超时时间（毫秒）
#define SHT20_MEASURE_TIMEOUT 1000

// 数据结构
typedef struct {
    float temperature;    // 温度值（摄氏度）
    float humidity;       // 湿度值（百分比）
    uint8_t data_valid;   // 数据是否有效
} SHT20_Data_t;

// 函数声明
void SHT20_Init(void);
HAL_StatusTypeDef SHT20_Read_Data(void);
HAL_StatusTypeDef SHT20_Soft_Reset(void);
HAL_StatusTypeDef SHT20_Set_Resolution(uint8_t resolution);
HAL_StatusTypeDef SHT20_Set_Heater(uint8_t enable);

extern SHT20_Data_t sht20_data;

#endif /* __SHT20_H */ 
